/* 
 * File:   Conexion.h
 * Author: Maximiliano Monzon (pd 82341)
 *
 * Created on October 20, 2012, 9:03 AM
 */

#ifndef CONEXION_H
#define	CONEXION_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h> 
#include "common_Thread.h"
#include "common_Excepcion.h"

using namespace TP;
using namespace TP::Threading;

namespace TP { namespace Comunicacion{

#define ERROR_CONEXION -1
    
class Conexion {
    
    public:
        
        Conexion(const string& pIp, const string& pPuerto);

        Conexion(const string& pIp, const string& pPuerto, const int &pTimeout);
        
        virtual ~Conexion();
        
        virtual void Iniciar() throw (Excepcion&);
        
        virtual void Finalizar() throw (Excepcion&);
        
        virtual int Escribir(const string& pMensaje) throw (Excepcion&);
        
        virtual int Leer (string& pMensaje) throw (Excepcion&);
        
    private:
        
        void decodificarErrorRecepcion (string &pMensaje, int& pCodigoError);
        
        string ip;
        string puerto;
        int sockfd; /* descriptor a usar con el socket */
        int timeout;
    };

}}


#endif	/* CONEXION_H */

